package com.mdd.validate.pay;

import com.alipay.api.domain.PromoParam;
import lombok.Data;

/**
 * TODO
 * <p>
 * {@code @Description}
 *
 * @Author 幻速
 * {@code @Date} 2023/10/30 17:44
 **/
@Data
public class TradePayParams {
    /**
     * String	必选	64
     * 商户订单号。
     * 由商家自定义，64个字符以内，仅支持字母、数字、下划线且需保证在商户端不重复。
     * 20150320010101001
     */
    private String out_trade_no;
    /**
     * Price	必选	11
     * 订单总金额。
     * 单位为元，精确到小数点后两位，取值范围：[0.01,100000000] 。
     * 88.88
     */
    private String total_amount;
    /**
     * String	必选	256
     * 订单标题。
     * 注意：不可使用特殊字符，如 /，=，& 等。
     * XX租车租金
     */
    private String subject;
    /**
     * String	必选	64
     * 商家和支付宝签约的产品码，固定传PREAUTH_PAY
     * PREAUTH_PAY
     */
    private String product_code;
    /**
     * String	必选	64
     * 资金预授权单号。
     * 支付宝预授权和新当面资金授权场景下必填。
     * 2016110310002001760201905725
     */
    private String auth_no;
    /**
     * String	可选	32
     * 预授权确认模式。
     * 适用于支付宝预授权和新当面资金授权场景。枚举值：
     * COMPLETE：转交易完成后解冻剩余冻结金额；
     * NOT_COMPLETE：转交易完成后不解冻剩余冻结金额；
     * 默认值为NOT_COMPLETE。
     * 枚举值
     * 转交易完成后解冻剩余冻结金额: COMPLETE
     * 转交易完成后不解冻剩余冻结金额: NOT_COMPLETE
     * COMPLETE
     */
    private String auth_confirm_mode;
    private GoodsDetail[] goods_detail;

    private ExtendParams[] extend_params;
    private PromoParam[] promo_params;

    @Data
    public static class GoodsDetail {
        /**
         * String	必选	64
         * 商品的编号
         * apple-01
         */
        private String goods_id;
        /**
         * String	必选	256
         * 商品名称
         * ipad
         */
        private String goods_name;
        /**
         * Number	必选	32
         * 商品数量
         * 1
         */
        private Integer quantity;
        /**
         * Price	必选	9
         * 商品单价，单位为元
         * 2000
         */
        private String price;
        /**
         * String	可选	24
         * 商品类目
         * 34543238
         */
        private String goods_category;
        /**
         * String	可选	128
         * 商品类目树，从商品类目根节点到叶子节点的类目id组成，类目id值使用|分割
         * 124868003|126232002|126252004
         */
        private String categories_tree;
        /**
         * String	可选	400
         * 商品的展示地址
         * <a href="http://www.alipay.com/xxx.jpg">...</a>
         */
        private String show_url;
    }

    @Data
    public static class ExtendParams {
        /**
         * String	可选	64
         * 系统商编号
         * 该参数作为系统商返佣数据提取的依据，请填写系统商签约协议的PID
         * 2088511833207846
         */
        private String sys_service_provider_id;
        /**
         * String	可选	32
         * 特殊场景下，允许商户指定交易展示的卖家名称
         * XXX的跨境小铺
         */
        private String specified_seller_name;
        /**
         * String	可选	32
         * 卡类型
         * S0JP0000
         */
        private String card_type;
    }

    @Data
    public static class PromoParams {
        /**
         * String	可选	32
         * 存在延迟扣款这一类的场景，用这个时间表明用户发生交易的时间，比如说，在公交地铁场景，用户刷码出站的时间，和商户上送交易的时间是不一样的。
         * 2018-09-25 22:47:33
         */
        private String actual_order_time;
        /**
         * String	可选	32
         * 商户门店编号。
         * 指商户创建门店时输入的门店编号。
         * NJ_001
         */
        private String store_id;
        /**
         * String	可选	32
         * 商户机具终端编号。
         * NJ_T_001
         */
        private String terminal_id;
        /**
         * String[]	可选	1024
         * 返回参数选项。
         * 商户通过传递该参数来定制同步需要额外返回的信息字段，数组格式。如：["fund_bill_list","voucher_detail_list","discount_goods_detail"]
         * 枚举值
         * 资金明细信息: fund_bill_list
         * 优惠券信息: voucher_detail_list
         * 因公付金额信息: enterprise_pay_info
         * 惠营宝回票金额信息: hyb_amount
         * 商品优惠信息: discount_goods_detail
         * 平台优惠金额: discount_amount
         * 商家优惠金额: mdiscount_amount
         * ["voucher_detail_list"]
         */
        private String[] query_options;
    }
}
